package cc.rengu.igas.bomp.common.util;

import cc.rengu.igas.bomp.common.enums.ProdAuthCtrlEnum;
import org.springframework.util.CollectionUtils;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;

import java.util.List;
import java.util.stream.Collectors;

/**
 * 银行卡支付-快捷支付：
 * 1、本行卡快捷支付(P01PM004 00)、新卡支付(本行卡)(P01PM001 00)、银行卡首次签约并支付(本行卡)(P01PM011 00)，后两个产品隐藏，
 * 并且增加与第一个产品的关联关系，即选择本行卡快捷支付时，后两个产品同步开通。
 * 2、银联无跳转支付(P01PM004 01)、银联无跳转签约并支付(P01PM013 00)、银联无跳转首次签约并支付(P01PM013 01)，参照第一条处理
 * 3、银联无卡快捷支付(P01PM004 02)、新卡支付(银联无卡快捷)(P01PM001 01)、银行卡首次签约并支付(银联无卡快捷)(P01PM011 01)，参照第一条处理
 * 4、【注】 前端处理，后台无需操作 开通本行个人网关支付(P01PM007 00)、本行企业网关支付(P01PM007 01) ，默认开通本行网银支付API(P01CP241 00) ；
 * 本行个人网关支付退款(P04PM007 00)，本行企业网关支付退款(P04PM007 01) ，默认开通本行网银支付退款API(P04CP241 00)  ；
 * 本行网银支付API(P04PM007 00)、本行网银支付退款API(P04CP241 00)可独立开通
 * 5、收银台微信公众号支付(P01PM002 00)，默认开通 微信公众号支付API(P01CP501 00) ；
 * 收银台微信小程序支付(P01PM002 01) ，默认开通微信小程序支付API(P01CP502 00)；
 * 微信公众号支付API(P01CP501 00)、微信小程序支付API(P01CP502 00)均隐藏
 */
public class ChangeProdAuthCtrlUtil {

    private static final MultiValueMap<ProdAuthCtrlEnum, Object> prodAuthCtrlMaps = new LinkedMultiValueMap<>();

    static {
        //1、本行卡快捷支付(P01PM004 00)、新卡支付(本行卡)(P01PM001 00)、银行卡首次签约并支付(本行卡)(P01PM011 00)
        // 后两个产品隐藏，并且增加与第一个产品的关联关系，即选择本行卡快捷支付时，后两个产品同步开通。
        prodAuthCtrlMaps.add(ProdAuthCtrlEnum.P01PM004_00, ProdAuthCtrlEnum.P01PM001_00);
        prodAuthCtrlMaps.add(ProdAuthCtrlEnum.P01PM004_00, ProdAuthCtrlEnum.P01PM011_00);

        // 2、银联无跳转支付(P01PM004 01)、银联无跳转签约并支付(P01PM013 00)、银联无跳转首次签约并支付(P01PM013 01)，参照第一条处理
        prodAuthCtrlMaps.add(ProdAuthCtrlEnum.P01PM004_01, ProdAuthCtrlEnum.P01PM013_00);
        prodAuthCtrlMaps.add(ProdAuthCtrlEnum.P01PM004_01, ProdAuthCtrlEnum.P01PM013_01);

        //3、 银联无卡快捷支付(P01PM004 02)、新卡支付(银联无卡快捷)(P01PM001 01)、银行卡首次签约并支付(银联无卡快捷)(P01PM011 01)，参照第一条处理
        prodAuthCtrlMaps.add(ProdAuthCtrlEnum.P01PM004_02, ProdAuthCtrlEnum.P01PM001_01);
        prodAuthCtrlMaps.add(ProdAuthCtrlEnum.P01PM004_02, ProdAuthCtrlEnum.P01PM011_01);

        //【注】 前端处理，后台无需操作
//        //4、 开通本行个人网关支付(P01PM007 00)、本行企业网关支付(P01PM007 01) ，默认开通本行网银支付API(P01CP241 00)
//        prodAuthCtrlMaps.add(ProdAuthCtrlEnum.P01PM007_00, ProdAuthCtrlEnum.P01CP241_00);
//        prodAuthCtrlMaps.add(ProdAuthCtrlEnum.P01PM007_01, ProdAuthCtrlEnum.P01CP241_00);
//        //本行个人网关支付退款(P04PM007 00)，本行企业网关支付退款(P04PM007 01) ，默认开通本行网银支付退款API(P04CP241 00)  ；
//        prodAuthCtrlMaps.add(ProdAuthCtrlEnum.P04PM007_00, ProdAuthCtrlEnum.P04CP241_00);
//        prodAuthCtrlMaps.add(ProdAuthCtrlEnum.P01PM007_01, ProdAuthCtrlEnum.P04CP241_00);


        //5、收银台微信公众号支付(P01PM002 00)，默认开通 微信公众号支付API(P01CP501 00) ；
        //  收银台微信小程序支付(P01PM002 01) ，默认开通微信小程序支付API(P01CP502 00)；
        // 微信公众号支付API(P01CP501 00)、微信小程序支付API(P01CP502 00)均隐藏
        prodAuthCtrlMaps.add(ProdAuthCtrlEnum.P01PM002_00, ProdAuthCtrlEnum.P01CP501_00);
        prodAuthCtrlMaps.add(ProdAuthCtrlEnum.P01PM002_01, ProdAuthCtrlEnum.P01CP502_00);

        //6.开通新卡支付(网联) P01PM001_02，则默认开通 银行卡首次签约并支付(网联) P01PM011_02，后者隐藏
        prodAuthCtrlMaps.add(ProdAuthCtrlEnum.P01PM001_02, ProdAuthCtrlEnum.P01PM011_02);

    }

    public static List<ProdAuthCtrlEnum> getProdAuthCtrlEnum(ProdAuthCtrlEnum prodAuthCtrlEnum) {
        List<Object> result = prodAuthCtrlMaps.get(prodAuthCtrlEnum);
        if (!CollectionUtils.isEmpty(result)) {
            return result.stream().map(item -> (ProdAuthCtrlEnum) item).collect(Collectors.toList());
        }
        return null;
    }

}
